package com.gxz.springboot.config;

import com.gxz.springboot.bean.Car;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;
import org.springframework.format.FormatterRegistry;
import org.springframework.util.ObjectUtils;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 *   @Configuration(proxyBeanMethods = false)
 *   1. 表示WebConfig 是一个配置类
 *   2.  proxyBeanMethods = false 使用了Life模式
 */
@Configuration(proxyBeanMethods = false)
public class WebConfig {
    // 让bean WebMvcConfigurer
    @Bean
    public WebMvcConfigurer webMvcConfigurer (){

        return new WebMvcConfigurer() {
            @Override
            public void addFormatters(FormatterRegistry registry) {
                /**
                 * 1. 在 addFormatters 方法中,增加一个自定义转换器
                 * 2. 增加自定义转换器 String -Car
                 * 3. 增加的自定义转换器会注册到converters容器中
                 * 4. converters 底层结构是ConcurrentHashMap  内置有124 转换器
                 */
                //
                //registry.addConverter(new Converter<String, Car>() {
                //    @Override
                //    public Car convert(String source) { //source就是传入的字符串
                //        //这里就加入自定义的转换业务
                //        if(!ObjectUtils.isEmpty(source)){
                //            Car car = new Car();
                //            String[] split = source.split(",");
                //            car.setName(split[0]);
                //            car.setPrice(Double.valueOf(split[1]));
                //            return car;
                //        }
                //        return null;
                //    }
                //});

                Converter<String, Car> converter = new Converter<String, Car>() {
                    @Override
                    public Car convert(String source) { //source就是传入的字符串
                        //这里就加入自定义的转换业务
                        if (!ObjectUtils.isEmpty(source)) {
                            Car car = new Car();
                            String[] split = source.split(",");
                            car.setName(split[0]);
                            car.setPrice(Double.valueOf(split[1]));
                            return car;
                        }
                        return null;
                    }
                };
                registry.addConverter(converter);
            }

        };

    }

}
